#include "AL_ISDU.h"
#include "Type_Define.h"
#include "Data_Buffer.h"
#include "ISDU_SPACE.h"
AL_ISDU_STATE_TYPE AL_ISDU_STATE;

void Init_AL_ISDU(void){
   AL_ISDU_STATE=AL_ISDU_Idle_0;
}


//由DL层ISDU Handler发出，收到主战发送的ISDU后解析，并处理
void Event_DL_ISDUTransport_ind(){
    if(AL_ISDU_STATE==AL_ISDU_Idle_0){
        AL_ISDU_STATE=AL_ISDU_Await_AL_RW_rsp_3;
        //待更新AL_ISDU_T5_6();
    }
}

//解析ISDU，返回值为ErrorType
uint16_t ParaseISDU(void){
    //解析ISDUBufferIn
    uint8_t I_Service=(ISDUBuferIn[0]&0xF0)>>4;
    uint8_t LEN=ISDUBuferIn[0]&0x0F;
    uint8_t ISDULength; //ISDU真正长度
    uint8_t PayLoadLength;//ISDU有效数据长度
    uint16_t Index;
    uint8_t Subindex;
    uint8_t * PayLoadData;
    uint8_t CHKPDU;
    // Write Request1 
    if(I_Service==0x01){
        if(LEN==0x01){ //ExLength
            ISDULength=ISDUBuferIn[1];
            Index=ISDUBuferIn[2];
            Subindex=0;
            PayLoadData=&ISDUBuferIn[3];
            PayLoadLength=ISDULength-4; // I-Service,Length,Index,CHKPDU
            
        }else{         //LEN
            ISDULength=LEN;
            Index=ISDUBuferIn[1];
            Subindex=0;
            PayLoadData=&ISDUBuferIn[2];
            PayLoadLength=ISDULength-3; // I-Service ,Index,CHKPDU
        }

    }

    // Write Request2

    if(I_Service==0x02){
        if(LEN==0x01){  //ExtLength
            ISDULength=ISDUBuferIn[1];
            Index=ISDUBuferIn[2];
            Subindex=ISDUBuferIn[3];
            PayLoadData=&ISDUBuferIn[4];
            PayLoadLength=ISDULength-5; //I-Service,Length,Index,subIndex,ChekPDU
        }else{
            ISDULength=LEN;
            Index=ISDUBuferIn[1];
            Subindex=ISDUBuferIn[2];
            PayLoadData=&ISDUBuferIn[3];
            PayLoadLength=ISDULength-4;//I-Service,Index,subIndex,ChekPDU

        }
    }
    
    //Write Request 3
    if(I_Service==0x03){
        if(LEN==0x01){ //ExtLength
            ISDULength=ISDUBuferIn[1];           
            Index=(ISDUBuferIn[2]<<8)|ISDUBuferIn[3];
            Subindex=ISDUBuferIn[4];
            PayLoadData=&ISDUBuferIn[5];
            PayLoadLength=ISDULength-6;
        }else{
            ISDULength=LEN;
            Index=(ISDUBuferIn[1]<<8)|ISDUBuferIn[2];
            Subindex=ISDUBuferIn[3];
            PayLoadData=&ISDUBuferIn[4];
             PayLoadLength=ISDULength-5;
        }
    }
   

}

 